{ Esta unidad contiene las funciones y procedimientos comunes para la gestión de
 el editor de textos

  Copyright (C) 2010 Jorge Turiel <contact>

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
unit uEditorComun;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,ComCtrls,Controls,SynMemo,uMain, uSolucion;

{
Este procedimiento crea una nueva pestaña, y dentro de ella, crea un SynMemo.
 Recibe dos parámetros: stNombre: es el nombre que se le dará a la pestaña
                        stRuta: es la ruta del fichero que se debe cargar, sino es una cadena vacia  }
Procedure CrearEditor (stNombre : String; stRuta : String);
//Guardar el texto cotenido en  synmemo que esta en un tab con id pasado por parámetro
Procedure GuardarEditor (idTab : longInt; stRuta : string);
//Guarda el El archivo del editor actual
Procedure GuardarEditorActual;

//Cierra Todas las pestañas
Procedure CerrarTabs;
//Cierra la Pestañá Actual
Procedure CerrarPestanaActual;

//Devuelve el número de TabSheet
Function NumeroDeTabs: Integer;
//Devuelve la propiedad Tag del la pestaña
Function ContenidoTag(I:Integer): Integer;
//Devuelve el contenido de Synmemo del TAbsheet que coindice con el indice pasado
Function Texto(Indice : Integer):TStringList;
implementation
uses uEditor,Ucomun;
Procedure GuardarEditor (idTab : longInt; stRuta : string);
Var
  i : integer;
  tab : TTabSheet;
  Editor : TSynMemo;
 // n: LongInt;
  Nombre: String;
Begin
  I:= 0;
  With frMain do
  Begin

  While i < frEditor.Contenedor.PageCount do
  Begin
  //n:= frEditor.Contenedor.Pages[i].Tag;
     if frEditor.Contenedor.Pages[i].Tag = idTab then
     Begin
        Tab := frEditor.Contenedor.Pages[I];
        if Tab <> nil Then
        Begin
          Editor := TSynMemo.Create(nil);
          Editor := TSynMemo(tab.Controls[0]);
          Nombre := frEditor.Contenedor.Pages[I].Caption;
          Editor.Lines.SaveToFile(stRuta+Ext);
          i := frEditor.Contenedor.PageCount;
        end;
     end;
     Inc(I);
  end;
  If Editor <> nil Then Editor := nil;
  end;
end;

procedure GuardarEditorActual;
var
  TabActual: TTabSheet;
  Registro: TProyecto;
begin
  With FrMain do
  Begin
    TabActual := frEditor.Contenedor.ActivePage;
    Registro := TProyecto.Create;
    Registro := Solucion.ProyectoPorNombre(ProyectoActual);
    If Registro <> nil Then
    Begin
       GuardarEditor (TabActual.TabIndex,Registro.Ruta);
    end;
    end;
end;

procedure CerrarTabs;
var
  Tab: TTabSheet;
begin
  With FrMain.frEditor do
  Begin
  Repeat
   Tab := Contenedor.ActivePage;
   If tab <> nil Then
   Begin
      CerrarPestanaActual;
   end;
   until tab = nil;
  end;
end;

procedure CerrarPestanaActual;
begin
  With FrMain.frEditor do
  Begin
    If Contenedor.PageCount < 1 Then
      Exit;
   Contenedor.ActivePage.Free;
  end;
end;

function NumeroDeTabs: Integer;
begin
  Result :=0;
  With frMain.frEditor Do
  Begin
    Result := Contenedor.PageCount;
  end;
end;

Function ContenidoTag(I:Integer): Integer;
Begin
  Result := 0;
  With frMain.frEditor do
  Begin
    Result := Contenedor.Pages[I].Tag;
  end;
end;

Function Texto(Indice : Integer):TStringList;
var
  I: Integer;
  Contenido : TStringList;
Begin
 Contenido := TStringList.Create;
 Contenido.Clear;
 Result := Contenido;

 With frMain.frEditor.Contenedor.Pages[Indice] do
  Begin
    For I := 0 To ControlCount -1 do
    Begin
       IF Controls[I] is TSynMemo Then
       Begin
          With Controls[I] as TSynMemo do
          Begin
            Contenido.Assign(Lines);

            Result := Contenido;
            Exit;
          end;
       end;
    end;
  end;
end;


{
Este procedimiento crea una nueva pestaña, y dentro de ella, crea un SynMemo.
 Recibe dos parámetros: stNombre: es el nombre que se le dará a la pestaña
                        stRuta: es la ruta del fichero que se debe cargar, sino es una cadena vacia
 }
 { TODO 1 -oJorge -cEditor : Al crear el archivo Main, del proyecto, añadir el esqueleto básico de la aplicación }
Procedure CrearEditor (stNombre : String; stRuta : String);
Var
 TabSheet : TTabSheet;
 SynMemo : TSynMemo;
 Extension : String;
Begin

With frMain do
begin
   //Si el nombre del fichero tiene extensión, se la quitamos
   TabSheet := TTabSheet.Create (frEditor.Contenedor);
   TabSheet.Name:= stNombre+IntToStr (nTabSheet);
   TabSheet.PageControl := frEditor.Contenedor;
   TabSheet.Caption := stNombre+Ext;
   TabSheet.Tag:= nTabSheet;
   TabSheet.Parent := frEditor.Contenedor;
   //TabSheet.CanTab := True;

   SynMemo := TSynMemo.Create(TabSheet);
   SynMemo.Parent := TabSheet;
   SynMemo.Align:= alClient;
   SynMemo.Highlighter := Coloreador;
   SynMemo.Lines.Clear;
   if stRuta <> '' Then
   Begin
     SynMemo.Lines.LoadFromFile(stRuta);
   end;
   //SynMemo.Lines.Add (IntToStr (TabSheet.Tag));
   IF stNombre = 'Main' Then
   Begin
        SynMemo.Lines.LoadFromFile(Datos+'Template.ide');
   end;
end;
Inc (nTabSheet);
ActualizaExplorador;
end;

end.

